const jwt = require('jsonwebtoken');
const db = require('../config/database');

// JWT密钥（在生产环境中应从环境变量获取）
const JWT_SECRET = process.env.JWT_SECRET || 'wms_secret_key';

// 认证中间件
const authenticateToken = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) {
    return res.status(401).json({ 
      success: false, 
      message: '访问令牌缺失' 
    });
  }

  jwt.verify(token, JWT_SECRET, (err, user) => {
    if (err) {
      return res.status(403).json({ 
        success: false, 
        message: '访问令牌无效' 
      });
    }
    req.user = user;
    next();
  });
};

// 管理员权限检查中间件
const authorizeAdmin = (req, res, next) => {
  if (req.user.role !== 'admin') {
    return res.status(403).json({ 
      success: false, 
      message: '需要管理员权限' 
    });
  }
  next();
};

// 用户登录验证
const login = (req, res) => {
  const { username, password } = req.body;

  // 验证输入
  if (!username || !password) {
    return res.status(400).json({ 
      success: false, 
      message: '用户名和密码为必填项' 
    });
  }

  // 查询用户
  const query = `SELECT * FROM users WHERE username = ?`;
  db.get(query, [username], (err, user) => {
    if (err) {
      return res.status(500).json({ 
        success: false, 
        message: '数据库查询失败' 
      });
    }

    if (!user) {
      return res.status(401).json({ 
        success: false, 
        message: '用户名或密码错误' 
      });
    }

    // 比较密码（在实际应用中应该使用bcrypt）
    if (user.password !== password) {
      return res.status(401).json({ 
        success: false, 
        message: '用户名或密码错误' 
      });
    }

    // 生成JWT令牌
    const token = jwt.sign(
      { id: user.id, username: user.username, role: user.role },
      JWT_SECRET,
      { expiresIn: '24h' }
    );

    res.json({
      success: true,
      message: '登录成功',
      data: {
        token,
        user: {
          id: user.id,
          username: user.username,
          role: user.role
        }
      }
    });
  });
};

// 用户注册
const register = (req, res) => {
  const { username, password, role } = req.body;

  // 验证输入
  if (!username || !password) {
    return res.status(400).json({ 
      success: false, 
      message: '用户名和密码为必填项' 
    });
  }

  const insertUser = `INSERT INTO users (username, password, role) VALUES (?, ?, ?)`;
  db.run(insertUser, [username, password, role || 'user'], function(err) {
    if (err) {
      if (err.message.includes('UNIQUE constraint failed')) {
        return res.status(400).json({ 
          success: false, 
          message: '用户名已存在' 
        });
      }
      return res.status(500).json({ 
        success: false, 
        message: '用户注册失败' 
      });
    }

    res.status(201).json({
      success: true,
      message: '用户注册成功',
      data: {
        id: this.lastID,
        username,
        role: role || 'user'
      }
    });
  });
};

module.exports = {
  authenticateToken,
  authorizeAdmin,
  login,
  register
};